--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/channel.py 032b1aa3b2808dc5aca0aebada0776c8ee7c6b20 (032b1aa3) Text, 18.61 KB
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787threading
Tff7b72import T7ee787RNS
Tff7b72from T7ee787RNST7ee787.T7ee787Channel Tff7b72import Te6edf3MessageStateTb4b4b4, Te6edf3ChannelOutletBaseTb4b4b4, Te6edf3ChannelTb4b4b4, Te6edf3MessageBase
Tff7b72import T7ee787RNST7ee787.T7ee787Buffer
Tff7b72from T7ee787RNST7ee787.T7ee787vendor Tff7b72import Te6edf3umsgpack
Tff7b72from T7ee787typing Tff7b72import Te6edf3Callable
Tff7b72import T7ee787contextlib
Tff7b72import T7ee787typing
Tff7b72import T7ee787types
Tff7b72import T7ee787time
Tff7b72import T7ee787uuid
Tff7b72import T7ee787unittest
Tff7b72class T56d364PacketTb4b4b4:
Te6edf3timeout Tff7b72= T79c0ff1.0
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rawTb4b4b4: Tffa657bytesTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_NEW
Tff7b72selfTff7b72.Td2a8ffraw Tff7b72= Te6edf3raw
Tff7b72selfTff7b72.Td2a8ffpacket_id Tff7b72= Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftries Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffRLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffinstances Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fftimeout_callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdelivered_callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72def Td2a8ffset_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4, Te6edf3timeoutTb4b4b4: Tffa657floatTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Tff7b72if Te6edf3timeout Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Te6edf3timeout
Tff7b72selfTff7b72.Td2a8fftimeout_callback Tff7b72= Te6edf3callback
Tff7b72def Td2a8ffsendTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftries Tff7b72+Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_SENT
Tff7b72def Td2a8ffelapsedTb4b4b4(Te6edf3timeoutTb4b4b4: Tffa657floatTb4b4b4, Te6edf3timeout_idTb4b4b4: Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstances Tff7b72+Tff7b72= T79c0ff1
Tff7b72tryTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Te6edf3timeoutTb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72== Te6edf3timeout_idTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_FAILED
Tff7b72if Tff7b72selfTff7b72.Td2a8fftimeout_callbackTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout_callbackTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72finallyTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinstances Tff7b72-Tff7b72= T79c0ff1
Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72= Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3elapsedTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffPacket TimeoutTa5d6ff"Tb4b4b4, Te6edf3argsTff7b72=Tb4b4b4[Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4, Tff7b72selfTff7b72.Td2a8fftimeout_idTb4b4b4]Tb4b4b4,
Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffclear_timeoutTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72= Tff7b72None
Tff7b72def Td2a8ffset_delivered_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelivered_callback Tff7b72= Te6edf3callback
Tff7b72def Td2a8ffdeliveredTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVERED
Tff7b72selfTff7b72.Td2a8fftimeout_id Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelivered_callbackTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelivered_callbackTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72class T56d364ChannelOutletTestTb4b4b4(Te6edf3ChannelOutletBaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffget_packet_stateTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4: Te6edf3PacketTb4b4b4) Tff7b72-Tff7b72> Te6edf3MessageStateTb4b4b4:
Tff7b72return Te6edf3packetTff7b72.Td2a8ffstate
Tff7b72def Td2a8ffset_packet_timeout_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4: Te6edf3PacketTb4b4b4, Te6edf3callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4,
Te6edf3timeoutTb4b4b4: Tffa657float Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3packetTff7b72.Td2a8ffset_timeoutTb4b4b4(Te6edf3callbackTb4b4b4, Te6edf3timeoutTb4b4b4)
Tff7b72def Td2a8ffset_packet_delivered_callbackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4: Te6edf3PacketTb4b4b4, Te6edf3callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3PacketTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3packetTff7b72.Td2a8ffset_delivered_callbackTb4b4b4(Te6edf3callbackTb4b4b4)
Tff7b72def Td2a8ffget_packet_idTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4: Te6edf3PacketTb4b4b4) Tff7b72-Tff7b72> Tffa657anyTb4b4b4:
Tff7b72return Te6edf3packetTff7b72.Td2a8ffpacket_id
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3mduTb4b4b4: Tffa657intTb4b4b4, Te6edf3rttTb4b4b4: Tffa657floatTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_id Tff7b72= Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fftimeout_callbacks Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ff_mdu Tff7b72= Te6edf3mdu
Tff7b72selfTff7b72.Td2a8ff_rtt Tff7b72= Te6edf3rtt
Tff7b72selfTff7b72.Td2a8ff_usable Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpackets Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fflock Tff7b72= Te6edf3threadingTff7b72.Td2a8ffRLockTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpacket_callbackTb4b4b4: Te6edf3CallableTb4b4b4[Tb4b4b4[Te6edf3ChannelOutletBaseTb4b4b4, Tffa657bytesTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4] Tff7b72| Tff7b72None Tff7b72= Tff7b72None
Tff7b72def Td2a8ffsendTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rawTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Te6edf3PacketTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Te6edf3packet Tff7b72= Te6edf3PacketTb4b4b4(Te6edf3rawTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpacketsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3packetTb4b4b4)
Tff7b72return Te6edf3packet
Tff7b72def Td2a8ffresendTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3packetTb4b4b4: Te6edf3PacketTb4b4b4) Tff7b72-Tff7b72> Te6edf3PacketTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8fflockTb4b4b4:
Te6edf3packetTff7b72.Td2a8ffsendTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3packet
Tf0883e@property
Tff7b72def Td2a8ffmduTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_mdu
Tf0883e@property
Tff7b72def Td2a8ffrttTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_rtt
Tf0883e@property
Tff7b72def Td2a8ffis_usableTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ff_usable
Tff7b72def Td2a8fftimed_outTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout_callbacks Tff7b72+Tff7b72= T79c0ff1
Tff7b72def Tff7b72__str__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8fflink_idTb4b4b4)
Tff7b72class T56d364MessageTestTb4b4b4(Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Te6edf3MSGTYPE Tff7b72= T79c0ff0xabcd
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffid Tff7b72= Tffa657strTb4b4b4(Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdata Tff7b72= Ta5d6ff"Ta5d6fftestTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffnot_serialized Tff7b72= Tffa657strTb4b4b4(Te6edf3uuidTff7b72.Td2a8ffuuid4Tb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffpackTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657bytesTb4b4b4:
Tff7b72return Te6edf3umsgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffidTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdataTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffunpackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdata Tff7b72= Te6edf3umsgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72class T56d364SystemMessageTb4b4b4(Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Te6edf3MSGTYPE Tff7b72= T79c0ff0xf000
Tff7b72def Td2a8ffpackTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tffa657bytesTb4b4b4:
Tff7b72return Tffa657bytesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffunpackTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72class T56d364ProtocolHarnessTb4b4b4(Te6edf3contextlibTff7b72.Td2a8ffAbstractContextManagerTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3rttTb4b4b4: Tffa657floatTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutlet Tff7b72= Te6edf3ChannelOutletTestTb4b4b4(Te6edf3mduTff7b72=T79c0ff500Tb4b4b4, Te6edf3rttTff7b72=Te6edf3rttTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffchannel Tff7b72= Te6edf3ChannelTb4b4b4(Tff7b72selfTff7b72.Td2a8ffoutletTb4b4b4)
Te6edf3PacketTff7b72.Td2a8fftimeout Tff7b72= Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ffcleanupTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_shutdownTb4b4b4(Tb4b4b4)
Tff7b72def Tff7b72__exit__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3__exc_typeTb4b4b4: Te6edf3typingTff7b72.Td2a8ffTypeTb4b4b4[Tf85149BaseExceptionTb4b4b4]Tb4b4b4, Te6edf3__exc_valueTb4b4b4: Tf85149BaseExceptionTb4b4b4,
Te6edf3__tracebackTb4b4b4: Te6edf3typesTff7b72.Td2a8ffTracebackTypeTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
T8b949e# self._log.debug(f"__exit__({__exc_type}, {__exc_value}, {__traceback})")
Tff7b72selfTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72False
Tff7b72class T56d364TestChannelTb4b4b4(Te6edf3unittestTff7b72.Td2a8ffTestCaseTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffsetUpTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrtt Tff7b72= T79c0ff0.01
Tff7b72selfTff7b72.Td2a8ffh Tff7b72= Te6edf3ProtocolHarnessTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrttTb4b4b4)
Tff7b72def Td2a8fftearDownTb4b4b4(Tff7b72selfTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffcleanupTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_send_one_retryTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test one retryTa5d6ff"Tb4b4b4)
Te6edf3message Tff7b72= Te6edf3MessageTestTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3envelope Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelope Tff7b72in Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4, Te6edf3packetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_SENTTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4, Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72* T79c0ff1.1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff2Tb4b4b4) Tff7b72* T79c0ff1.1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3packetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_SENTTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffdeliveredTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVEREDTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff3Tb4b4b4) Tff7b72* T79c0ff1.1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff3Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Tff7b72def Td2a8fftest_send_timeoutTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test retry count exceededTa5d6ff"Tb4b4b4)
Te6edf3message Tff7b72= Te6edf3MessageTestTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3envelope Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelope Tff7b72in Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4, Te6edf3packetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_SENTTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4, Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff3Tb4b4b4)Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff4Tb4b4b4)Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff5Tb4b4b4) Tff7b72* T79c0ff1.1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff5Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff5Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_FAILEDTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Tff7b72def Td2a8fftest_send_on_failing_outlet_does_not_corrupt_stateTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# if outlet.send() returns a packet that never reached
T8b949e# the wire (LinkChannelOutlet does this when the link is not ACTIVE; the
T8b949e# returned packet has raw=None), Channel.send() must not consume a
T8b949e# sequence number or leave a packetless envelope in _tx_ring. Before
T8b949e# the fix, the envelope was queued before outlet.send() returned, so a
T8b949e# "dead" return left a raw=None envelope in the ring and silently
T8b949e# advanced _next_sequence, stalling the channel on the other end.
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test send on failing outletTa5d6ff"Tb4b4b4)
Te6edf3original_send Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffsend
Tff7b72def Td2a8ffghost_sendTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8fflockTb4b4b4:
Te6edf3packet Tff7b72= Te6edf3PacketTb4b4b4(Tff7b72NoneTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffstate Tff7b72= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_FAILED
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3packetTb4b4b4)
Tff7b72return Te6edf3packet
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffsend Tff7b72= Te6edf3ghost_send
Te6edf3pre_sequence Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_next_sequence
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffassertRaisesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffChannelTff7b72.Td2a8ffChannelExceptionTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3MessageTestTb4b4b4(Tb4b4b4)Tb4b4b4)
T8b949e# Sequence must not have been consumed.
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3pre_sequenceTb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_next_sequenceTb4b4b4)
T8b949e# _tx_ring must not contain a packetless envelope.
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)Tb4b4b4)
T8b949e# A subsequent successful send should use the same sequence number as
T8b949e# was reserved for the failed attempt.
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffsend Tff7b72= Te6edf3original_send
Te6edf3envelope Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3MessageTestTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3pre_sequenceTb4b4b4, Te6edf3envelopeTff7b72.Td2a8ffsequenceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTff7b72.Td2a8ffrawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelope Tff7b72in Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)
Tff7b72def Td2a8fftest_multiple_handlerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test multiple handler short circuitTa5d6ff"Tb4b4b4)
Te6edf3handler1_called Tff7b72= T79c0ff0
Te6edf3handler1_return Tff7b72= Tff7b72True
Te6edf3handler2_called Tff7b72= T79c0ff0
Tff7b72def Td2a8ffhandler1Tb4b4b4(Te6edf3msgTb4b4b4: Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3handler1_calledTb4b4b4, Te6edf3handler1_return
Tff7b72selfTff7b72.Td2a8ffassertIsInstanceTb4b4b4(Te6edf3msgTb4b4b4, Te6edf3MessageTestTb4b4b4)
Te6edf3handler1_called Tff7b72+Tff7b72= T79c0ff1
Tff7b72return Te6edf3handler1_return
Tff7b72def Td2a8ffhandler2Tb4b4b4(Te6edf3msgTb4b4b4: Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3handler2_called
Tff7b72selfTff7b72.Td2a8ffassertIsInstanceTb4b4b4(Te6edf3msgTb4b4b4, Te6edf3MessageTestTb4b4b4)
Te6edf3handler2_called Tff7b72+Tff7b72= T79c0ff1
Te6edf3message Tff7b72= Te6edf3MessageTestTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffregister_message_typeTb4b4b4(Te6edf3MessageTestTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffadd_message_handlerTb4b4b4(Te6edf3handler1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffadd_message_handlerTb4b4b4(Te6edf3handler2Tb4b4b4)
Te6edf3envelope Tff7b72= Te6edf3RNSTff7b72.Td2a8ffChannelTff7b72.Td2a8ffEnvelopeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3sequenceTff7b72=T79c0ff0Tb4b4b4)
Te6edf3raw Tff7b72= Te6edf3envelopeTff7b72.Td2a8ffpackTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3rawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3handler1_calledTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3handler2_calledTb4b4b4)
Te6edf3handler1_return Tff7b72= Tff7b72False
Te6edf3envelope Tff7b72= Te6edf3RNSTff7b72.Td2a8ffChannelTff7b72.Td2a8ffEnvelopeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTb4b4b4, Te6edf3messageTb4b4b4, Te6edf3sequenceTff7b72=T79c0ff1Tb4b4b4)
Te6edf3raw Tff7b72= Te6edf3envelopeTff7b72.Td2a8ffpackTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3rawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff2Tb4b4b4, Te6edf3handler1_calledTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3handler2_calledTb4b4b4)
Tff7b72def Td2a8fftest_system_message_checkTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test register system messageTa5d6ff"Tb4b4b4)
Tff7b72with Tff7b72selfTff7b72.Td2a8ffassertRaisesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffChannelTff7b72.Td2a8ffChannelExceptionTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffregister_message_typeTb4b4b4(Te6edf3SystemMessageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_register_message_typeTb4b4b4(Te6edf3SystemMessageTb4b4b4, Te6edf3is_system_typeTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffeat_own_dog_foodTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3messageTb4b4b4: Te6edf3MessageBaseTb4b4b4, Te6edf3checkerTb4b4b4: Te6edf3typingTff7b72.Td2a8ffCallableTb4b4b4[Tb4b4b4[Te6edf3MessageBaseTb4b4b4]Tb4b4b4, Tff7b72NoneTb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3decodedTb4b4b4: Tb4b4b4[Te6edf3MessageBaseTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72def Td2a8ffhandle_messageTb4b4b4(Te6edf3messageTb4b4b4: Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Te6edf3decodedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3messageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffregister_message_typeTb4b4b4(Te6edf3messageTff7b72.Td2a8ff__class__Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffadd_message_handlerTb4b4b4(Te6edf3handle_messageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4)
Te6edf3envelope Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffsendTb4b4b4(Te6edf3messageTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72* T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelope Tff7b72in Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_tx_ringTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffpacketTb4b4b4, Te6edf3packetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_SENTTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3envelopeTff7b72.Td2a8ffrawTb4b4b4, Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffdeliveredTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVEREDTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_get_packet_timeout_timeTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3envelopeTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3packetTff7b72.Td2a8fftriesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3packetTff7b72.Td2a8ffinstancesTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVEREDTb4b4b4, Te6edf3packetTff7b72.Td2a8ffstateTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertFalseTb4b4b4(Te6edf3envelopeTff7b72.Td2a8fftrackedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff0Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3decodedTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.5Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3decodedTb4b4b4)Tb4b4b4)
Te6edf3rx_message Tff7b72= Te6edf3decodedTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3rx_messageTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsInstanceTb4b4b4(Te6edf3rx_messageTb4b4b4, Te6edf3messageTff7b72.Td2a8ff__class__Tb4b4b4)
Te6edf3checkerTb4b4b4(Te6edf3rx_messageTb4b4b4)
Tff7b72def Td2a8fftest_send_receive_message_testTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ffChannel test send and receive messageTa5d6ff"Tb4b4b4)
Te6edf3message Tff7b72= Te6edf3MessageTestTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcheckTb4b4b4(Te6edf3rx_messageTb4b4b4: Te6edf3MessageBaseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffassertIsInstanceTb4b4b4(Te6edf3rx_messageTb4b4b4, Te6edf3messageTff7b72.Td2a8ff__class__Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3messageTff7b72.Td2a8ffidTb4b4b4, Te6edf3rx_messageTff7b72.Td2a8ffidTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3messageTff7b72.Td2a8ffdataTb4b4b4, Te6edf3rx_messageTff7b72.Td2a8ffdataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertNotEqualTb4b4b4(Te6edf3messageTff7b72.Td2a8ffnot_serializedTb4b4b4, Te6edf3rx_messageTff7b72.Td2a8ffnot_serializedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffeat_own_dog_foodTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3checkTb4b4b4)
Tff7b72def Td2a8fftest_buffer_small_bidirectionalTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3data Tff7b72= Ta5d6ff"Ta5d6ffHelloTffea00\nTa5d6ff"
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffBufferTff7b72.Td2a8ffcreate_bidirectional_bufferTb4b4b4(T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTb4b4b4) Tff7b72as Te6edf3bufferTb4b4b4:
Te6edf3count Tff7b72= Te6edf3bufferTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3bufferTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4, Te6edf3countTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.2Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3bufferTff7b72.Td2a8ffreadlineTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4)
Te6edf3decoded Tff7b72= Te6edf3resultTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3decodedTb4b4b4)
Tff7b72def Td2a8fftest_buffer_bigTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3writer Tff7b72= Te6edf3RNSTff7b72.Td2a8ffBufferTff7b72.Td2a8ffcreate_writerTb4b4b4(T79c0ff15Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTb4b4b4)
Te6edf3reader Tff7b72= Te6edf3RNSTff7b72.Td2a8ffBufferTff7b72.Td2a8ffcreate_readerTb4b4b4(T79c0ff15Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTb4b4b4)
Te6edf3data Tff7b72= Ta5d6ff"Ta5d6ff01234556789Ta5d6ff"Tff7b72*T79c0ff1024Tff7b72*T79c0ff5 T8b949e# 50 KB
Te6edf3count Tff7b72= T79c0ff0
Te6edf3write_finished Tff7b72= Tff7b72False
Tff7b72def Td2a8ffwrite_threadTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3countTb4b4b4, Te6edf3write_finished
Te6edf3count Tff7b72= Te6edf3writerTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3writerTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Te6edf3writerTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4) T8b949e# TODO: Workaround for https://github.com/python/cpython/issues/138720
Te6edf3write_finished Tff7b72= Tff7b72True
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3write_threadTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffWrite ThreadTa5d6ff"Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72while Tff7b72not Te6edf3write_finished Tff7b72or Tffa657nextTb4b4b4(Tffa657filterTb4b4b4(Tff7b72lambda Te6edf3xTb4b4b4: Te6edf3xTff7b72.Td2a8ffstate Tff7b72!= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVEREDTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4, Tff7b72NoneTb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72with Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8fflockTb4b4b4:
Tff7b72for Te6edf3packet Tff7b72in Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4:
Tff7b72if Te6edf3packetTff7b72.Td2a8ffstate Tff7b72!= Te6edf3MessageStateTff7b72.Td2a8ffMSGSTATE_DELIVEREDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffdeliveredTb4b4b4(Tb4b4b4)
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.0001Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4, Te6edf3countTb4b4b4)
Te6edf3read_finished Tff7b72= Tff7b72False
Te6edf3result Tff7b72= Tffa657bytesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffread_threadTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3read_finishedTb4b4b4, Te6edf3result
Te6edf3result Tff7b72= Te6edf3readerTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3read_finished Tff7b72= Tff7b72True
Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Te6edf3read_threadTb4b4b4, Te6edf3nameTff7b72=Ta5d6ff"Ta5d6ffRead ThreadTa5d6ff"Tb4b4b4, Te6edf3daemonTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Te6edf3timeout_at Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72+ T79c0ff7
Tff7b72while Tff7b72not Te6edf3read_finished Tff7b72and Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3timeout_atTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.001Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Te6edf3read_finishedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4)
Te6edf3decoded Tff7b72= Te6edf3resultTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertSequenceEqualTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3decodedTb4b4b4)
Tff7b72def Td2a8fftest_buffer_small_with_callbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3callbacks Tff7b72= T79c0ff0
Te6edf3last_cb_value Tff7b72= Tff7b72None
Tff7b72def Td2a8ffcallbackTb4b4b4(Te6edf3readyTb4b4b4: Tffa657intTb4b4b4)Tb4b4b4:
Tff7b72nonlocal Te6edf3callbacksTb4b4b4, Te6edf3last_cb_value
Te6edf3callbacks Tff7b72+Tff7b72= T79c0ff1
Te6edf3last_cb_value Tff7b72= Te6edf3ready
Te6edf3data Tff7b72= Ta5d6ff"Ta5d6ffHelloTffea00\nTa5d6ff"
Tff7b72with Te6edf3RNSTff7b72.Td2a8ffRawChannelWriterTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTb4b4b4) Tff7b72as Te6edf3writerTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffRawChannelReaderTb4b4b4(T79c0ff0Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTb4b4b4) Tff7b72as Te6edf3readerTb4b4b4:
Te6edf3readerTff7b72.Td2a8ffadd_ready_callbackTb4b4b4(Te6edf3callbackTb4b4b4)
Te6edf3count Tff7b72= Te6edf3writerTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3dataTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3writerTff7b72.Td2a8ffflushTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4, Te6edf3countTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffdeliveredTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Te6edf3callbacksTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4, Te6edf3last_cb_valueTb4b4b4)
Te6edf3result Tff7b72= Te6edf3readerTff7b72.Td2a8ffreadlineTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4)Tb4b4b4, Tffa657lenTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4)
Te6edf3decoded Tff7b72= Te6edf3resultTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3decodedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff1Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3readerTff7b72.Td2a8ffreadTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNoneTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ffis_ready_to_sendTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3writerTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertEqualTb4b4b4(T79c0ff2Tb4b4b4, Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4)Tb4b4b4)
Te6edf3packet Tff7b72= Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffoutletTff7b72.Td2a8ffpacketsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhTff7b72.Td2a8ffchannelTff7b72.Td2a8ff_receiveTb4b4b4(Te6edf3packetTff7b72.Td2a8ffrawTb4b4b4)
Te6edf3packetTff7b72.Td2a8ffdeliveredTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3readerTff7b72.Td2a8ffreadTb4b4b4(T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertIsNotNoneTb4b4b4(Te6edf3resultTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffassertTrueTb4b4b4(Tffa657lenTb4b4b4(Te6edf3resultTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff'Ta5d6ff__main__Ta5d6ff'Tb4b4b4:
Te6edf3unittestTff7b72.Td2a8ffmainTb4b4b4(Te6edf3verbosityTff7b72=T79c0ff2Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────